package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	//Go 中使用 strings 包来完成对字符串的主要操作。
	var a = "preffix666"
	println(strings.HasPrefix(a, "prefix"))           //判断字符串是否为prefix开头
	println(strings.HasSuffix(a, "666"))              //判断字符串是否为666结尾
	println(strings.Contains(a, "fix"))               //判断是否含有fix
	println(strings.Index(a, "f"))                    //判断子字符串或字符在父字符串中第一次出现的位置的索引
	println(strings.LastIndex(a, "f"))                //判断子字符串或字符在父字符串中中最后出现位置的索引
	println(strings.Count(a, "f"))                    //统计出现的非重复次数
	println(strings.Replace(a, "preff", "pref", 100)) //字符串替换 n用来限制替换范围
	// Replace 用于将字符串 str 中的前 n 个字符串 old 替换为字符串 new，并返回一个新的字符串，如果 n = -1 则替换所有字符串 old 为字符串 new：
	a1 := strings.Repeat(a, 2) //重复两次字符串s
	println(a1)
	println(strings.ToLower(a))
	println(strings.ToUpper(a)) //修改字符串大小写
	//修剪字符串 strings.TrimSpace(s) 来剔除字符串开头和结尾的空白符号；如果你想要剔除指定字符，
	//则可以使用 strings.Trim(s, "cut") 来将开头和结尾的 cut 去除掉。该函数的第二个参数可以包含任何字符，
	//如果你只想剔除开头或者结尾的字符串，则可以使用 TrimLeft 或者 TrimRight 来实现。
	println(strings.TrimLeft(a, "pre"))
	println(strings.TrimRight(a, "666"))
	//分割字符串 利用空白作为分隔符将字符串分割为若干块，并返回一个 slice 。如果字符串只包含空白符号，返回一个长度为 0 的 slice 。
	var a2 = "pre fix 666"
	println(strings.Fields(a2))
	//拼接slice到字符串
	//从字符串中读取内容
	//reader := strings.NewReader(a)  //然后返回指向该 Reader 的指针
	//reader.Read()//从 [] byte 中读取内容。
	//reader.ReadByte()//ReadByte()从字符串中读取下一个byte
	//reader.ReadRune()//ReadRune()读取下一个rune

	//字符串与其他类型的转换   字符串相关的类型转换都是通过 strconv 包实现的
	a3 := 10
	a4 := 10.0
	a5 := "10"
	//针对从数字类型转换到字符串
	itoa := strconv.Itoa(a3)
	println(itoa)
	itoa2 := strconv.FormatFloat(a4, 'f', 3, 64) //fmt为格式，prec为精度，bitSize 32，64则表示float32或float 64
	println(itoa2)
	//字符串转换成数字
	atoi, _ := strconv.Atoi(a5)
	println(atoi)

	//for循环遍历字符串，数组
	for i := 0; i < len(a); i++ {
		fmt.Printf("%c\n", a[i])
	}
	//range遍历数组，切片  以后经常会用到
	for i, v := range a { //i和v表示从a中拿出每一个的下标和值，我们直接使用下标和值即可
		fmt.Printf("%d", i)
		fmt.Printf("%c\n", v)
	}
}
